package com.ruoyi.common.vo;

import cn.hutool.core.util.PageUtil;
import com.github.pagehelper.Page;
import lombok.Data;

import java.util.ArrayList;
import java.util.List;

@Data
public class PageResult<T> {
    public static final int DEFAULT_PAGE_SIZE = 20;

    private List<T> data;
    /**
     * 页码，{@link PageUtil#getFirstPageNo()}表示第一页
     */
    private int page;
    /**
     * 每页结果数
     */
    private int pageSize;
    /**
     * 总页数
     */
    private int totalPage;
    /**
     * 总数
     */
    private int total;

    public PageResult() {
        this(0, DEFAULT_PAGE_SIZE);
    }

    /**
     * 构造
     *
     * @param page     页码，0表示第一页
     * @param pageSize 每页结果数
     */
    public PageResult(int page, int pageSize) {
        this.page = Math.max(page, 0);
        this.pageSize = pageSize <= 0 ? Integer.MAX_VALUE : pageSize;
    }

    /**
     * 构造
     *
     * @param page     页码，0表示第一页
     * @param pageSize 每页结果数
     * @param total    结果总数
     */
    public PageResult(int page, int pageSize, int total) {
        this(page, pageSize);

        this.total = total;
        this.totalPage = PageUtil.totalPage(total, pageSize);
    }

    public void addAll(List<T> data){
        if(this.data == null){
            this.data = new ArrayList<>(total);
        }
        this.data.addAll(data);
    }


    public Page<T> convertToPage(){
        Page<T> res = new Page<>(getPage() , getPageSize());
        if(getTotal() > 0){
            res.addAll(getData());
        }
        res.setTotal(getTotal());
        return res;
    }
}
